/*
*********************************************************************************************************
*                                              uC/TCP-IP
*                                      The Embedded TCP/IP Suite
*
*                    Copyright 2004-2020 Silicon Laboratories Inc. www.silabs.com
*
*                                 SPDX-License-Identifier: APACHE-2.0
*
*               This software is subject to an open source license and is distributed by
*                Silicon Laboratories Inc. pursuant to the terms of the Apache License,
*                    Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
*
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                       NETWORK CRYPTO SHA1 UTILITY
*
* Filename : net_sha1.h
* Version  : V3.06.00
*********************************************************************************************************
* Note(s)  : (1) This is the header file for code which implements the Secure Hashing Algorithm 1 as
*                defined in FIPS PUB 180-1 published April 17, 1995.
*
*                Many of the variable names in this code, especially the single character names, were
*                used because those were the names used in the publication.
*
*                Please read the file net_sha1.c for more information.
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*********************************************************************************************************
*                                               MODULE
*********************************************************************************************************
*********************************************************************************************************
*/

#ifndef  NET_SHA1_MODULE_PRESENT
#define  NET_SHA1_MODULE_PRESENT


/*
*********************************************************************************************************
*********************************************************************************************************
*                                            INCLUDE FILES
*********************************************************************************************************
*********************************************************************************************************
*/

#include  <Source/net.h>
#include  <lib_mem.h>


/*
*********************************************************************************************************
*********************************************************************************************************
*                                                DEFINES
*********************************************************************************************************
*********************************************************************************************************
*/

#define  NET_SHA1_HASH_SIZE                 20

#define  NET_SHA1_INTERMEDIATE_HASH_SIZE    NET_SHA1_HASH_SIZE / 4


/*
*********************************************************************************************************
*********************************************************************************************************
*                                            ENUMERATIONS
*********************************************************************************************************
*********************************************************************************************************
*/

typedef enum
{
    NET_SHA1_ERR_NONE                 = 0,
    NET_SHA1_ERR_PTR_NULL             = 1,
    NET_SHA1_ERR_INPUT_TOO_LONG       = 2,
    NET_SHA1_ERR_STATE_ERROR          = 3,
    NET_SHA1_ERR_CORRUPTION           = 4,

}NET_SHA1_ERR;


/*
*********************************************************************************************************
*********************************************************************************************************
*                                              DATA TYPES
*********************************************************************************************************
*********************************************************************************************************
*/

typedef struct net_sha1_context{

    CPU_INT32U      Intermediate_Hash[NET_SHA1_INTERMEDIATE_HASH_SIZE];

    CPU_INT32U      Length_Low;                                 /* Message length in bits                               */
    CPU_INT32U      Length_High;                                /* Message length in bits                               */

                                                                /* Index into message block array                       */
    CPU_INT16U      Message_Block_Index;
    CPU_INT08U      Message_Block[64];                          /* 512-bit message blocks                               */

    CPU_BOOLEAN     Computed;                                   /* Is the digest computed?                              */
    NET_SHA1_ERR    Corrupted;                                  /* Is the message digest corrupted?                     */

} NET_SHA1_CTX;




/*
*********************************************************************************************************
*********************************************************************************************************
*                                          FUNCTION PROTOTYPES
*********************************************************************************************************
*********************************************************************************************************
*/


CPU_BOOLEAN NetSHA1_Reset     (      NET_SHA1_CTX  *p_ctx,
                                     NET_SHA1_ERR  *p_err);

CPU_BOOLEAN NetSHA1_Input     (      NET_SHA1_CTX  *p_ctx,
                               const CPU_CHAR      *p_msg,
                                     CPU_INT32U     len,
                                     NET_SHA1_ERR  *p_err);

CPU_BOOLEAN NetSHA1_Result    (      NET_SHA1_CTX  *p_ctx,
                                     CPU_CHAR      *p_msg_digest,
                                     NET_SHA1_ERR  *p_err);


/*
*********************************************************************************************************
*********************************************************************************************************
*                                             MODULE END
*********************************************************************************************************
*********************************************************************************************************
*/

#endif  /* NET_SHA1_MODULE_PRESENT */
